/**
 * 命令执行系统
 * 
 * 职责：
 * 1. 在每帧执行命令队列
 * 2. 控制命令执行时间，保证帧率
 * 3. 在渲染系统之前执行
 * 
 * @author AI Assistant
 * @date 2025-11-26
 */

import { ecs } from "../../../core/ecs/ECS";
import { commandQueue, renderCommandExecutor, CommandType } from "../command";

/**
 * 命令执行系统
 * 
 * 注意：此系统应该在所有渲染系统之前执行
 */
export class CommandExecutionSystem extends ecs.System {
    /**
     * 初始化系统
     */
    init(): void {
        console.log('[CommandExecutionSystem] 初始化命令执行系统...');
        
        // 注册命令执行器
        this.registerCommandExecutors();
        
        console.log('[CommandExecutionSystem] ✅ 命令执行系统初始化完成');
    }
    
    /**
     * 注册所有支持的命令执行器
     */
    private registerCommandExecutors(): void {
        const commandTypes = [
            CommandType.SET_POSITION,
            CommandType.SET_ROTATION,
            CommandType.SET_SCALE,
            CommandType.SET_VISIBLE,
            CommandType.SET_ACTIVE,
            CommandType.PLAY_ANIMATION,
            CommandType.STOP_ANIMATION,
            CommandType.PAUSE_ANIMATION,
            CommandType.SET_SPRITE_FRAME,
            CommandType.SET_SPRITE_COLOR,
            CommandType.SET_SPRITE_OPACITY,
            CommandType.SET_LABEL_TEXT,
            CommandType.SET_LABEL_COLOR,
            CommandType.DESTROY_NODE
        ];
        
        for (const type of commandTypes) {
            commandQueue.registerExecutor(type, renderCommandExecutor);
        }
        
        console.log(`[CommandExecutionSystem] 注册了 ${commandTypes.length} 个命令执行器`);
    }
    
    /**
     * 每帧执行
     * @param dt 帧时间差（秒）
     */
    update(dt: number): void {
        // 执行命令队列
        // 限制最大执行时间为 16ms（保证 60 FPS）
        commandQueue.executeAll(16);
    }
    
    /**
     * 系统销毁
     */
    onDestroy(): void {
        console.log('[CommandExecutionSystem] 🛑 命令执行系统销毁');
        
        // 清空待执行的命令
        commandQueue.clear();
    }
}

/**
 * 导出命令执行系统实例
 */
// export const commandExecutionSystem = new CommandExecutionSystem();

